<?php


namespace app\admin\controller;


use think\Page;


use think\Db;


use app\common\logic\ArctypeLogic;


use app\admin\logic\ProductLogic;




class Product extends Base


{


    // 模型标识


    public $nid = 'product';


    // 模型ID


    public $channeltype = '';


    // 表单类型


    public $attrInputTypeArr = array();


    public function _initialize()


    {


        parent::_initialize();


        $channeltype_list = config('global.channeltype_list');


        $this->channeltype = $channeltype_list[$this->nid];


        empty($this->channeltype) && $this->channeltype = 2;


        $this->attrInputTypeArr = config('global.attr_input_type_arr');


        $this->assign('nid', $this->nid);


        $this->assign('channeltype', $this->channeltype);


    }


    /**
     * 文章列表
     */


    public function index()


    {

        $assign_data = array();


        $condition = array();


        // 获取到所有GET参数


        $param = input('param.');


        $flag = input('flag/s');


        $typeid = input('typeid/d', 0);


        $begin = strtotime(input('add_time_begin'));


        $end = strtotime(input('add_time_end'));


        // 应用搜索条件


        foreach (['keywords', 'typeid', 'flag', 'is_release'] as $key) {


            if (isset($param[$key]) && $param[$key] !== '') {


                if ($key == 'keywords') {


                    $condition['a.title'] = array('LIKE', "%{$param[$key]}%");


                } else if ($key == 'typeid') {


                    $typeid = $param[$key];


                    $hasRow = model('Arctype')->getHasChildren($typeid);


                    $typeids = get_arr_column($hasRow, 'id');


                    /*权限控制 by 小虎哥*/


                    $admin_info = session('admin_info');


                    if (0 < intval($admin_info['role_id'])) {


                        $auth_role_info = $admin_info['auth_role_info'];


                        if (!empty($auth_role_info)) {


                            if (!empty($auth_role_info['permission']['arctype'])) {


                                if (!empty($typeid)) {


                                    $typeids = array_intersect($typeids, $auth_role_info['permission']['arctype']);


                                }


                            }


                        }


                    }


                    /*--end*/


                    $condition['a.typeid'] = array('IN', $typeids);


                } else if ($key == 'flag') {


                    if ('is_release' == $param[$key]) {


                        $condition['a.users_id'] = array('gt', 0);


                    } else {


                        $condition['a.' . $param[$key]] = array('eq', 1);


                    }


                    // } else if ($key == 'is_release') {


                    //     if (0 < intval($param[$key])) {


                    //         $condition['a.users_id'] = array('gt', intval($param[$key]));


                    //     }


                } else {


                    $condition['a.' . $key] = array('eq', $param[$key]);


                }


            }


        }


        /*权限控制 by 小虎哥*/


        $admin_info = session('admin_info');


        if (0 < intval($admin_info['role_id'])) {


            $auth_role_info = $admin_info['auth_role_info'];


            if (!empty($auth_role_info)) {


                if (isset($auth_role_info['only_oneself']) && 1 == $auth_role_info['only_oneself']) {


                    $condition['a.admin_id'] = $admin_info['admin_id'];


                }


            }


        }


        /*--end*/


        // 时间检索


        if ($begin > 0 && $end > 0) {


            $condition['a.add_time'] = array('between', "$begin,$end");


        } else if ($begin > 0) {


            $condition['a.add_time'] = array('egt', $begin);


        } else if ($end > 0) {


            $condition['a.add_time'] = array('elt', $end);


        }


        // 模型ID


        $condition['a.channel'] = array('eq', $this->channeltype);


        // 多语言


        $condition['a.lang'] = array('eq', $this->admin_lang);


        // 回收站


        $condition['a.is_del'] = array('eq', 0);


        /*自定义排序*/


        $orderby = input('param.orderby/s');


        $orderway = input('param.orderway/s');


        if (!empty($orderby)) {


            $orderby = "a.{$orderby} {$orderway}";


            $orderby .= ", a.aid desc";


        } else {


            $orderby = "a.aid desc";


        }


        /*end*/


        /**
         * 数据查询，搜索出主键ID的值
         */


        $count = DB::name('archives')->alias('a')->where($condition)->count('aid');// 查询满足要求的总记录数


        $Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数


        $list = DB::name('archives')
            ->field("a.aid")
            ->alias('a')
            ->where($condition)
            ->order($orderby)
            ->limit($Page->firstRow . ',' . $Page->listRows)
            ->getAllWithIndex('aid');


        /**
         * 完善数据集信息
         * 在数据量大的情况下，经过优化的搜索逻辑，先搜索出主键ID，再通过ID将其他信息补充完整；
         */


        if ($list) {


            $aids = array_keys($list);


            $fields = "b.*, a.*, a.aid as aid";


            $row = DB::name('archives')
                ->field($fields)
                ->alias('a')
                ->join('__ARCTYPE__ b', 'a.typeid = b.id', 'LEFT')
                ->where('a.aid', 'in', $aids)
                ->getAllWithIndex('aid');


            foreach ($list as $key => $val) {


                $row[$val['aid']]['arcurl'] = get_arcurl($row[$val['aid']]);


                $row[$val['aid']]['litpic'] = handle_subdir_pic($row[$val['aid']]['litpic']); // 支持子目录


                $list[$key] = $row[$val['aid']];


            }


        }


        $show = $Page->show(); // 分页显示输出


        $assign_data['page'] = $show; // 赋值分页输出


        $assign_data['list'] = $list; // 赋值数据集


        $assign_data['pager'] = $Page; // 赋值分页对象


        // 栏目ID


        $assign_data['typeid'] = $typeid; // 栏目ID


        /*当前栏目信息*/


        $arctype_info = array();


        if ($typeid > 0) {


            $arctype_info = M('arctype')->field('typename')->find($typeid);


        }


        $assign_data['arctype_info'] = $arctype_info;


        /*--end*/


        /*选项卡*/


        $tab = input('param.tab/d', 3);


        $assign_data['tab'] = $tab;


        /*--end*/


        $this->assign($assign_data);


        return $this->fetch();


    }


    /**
     * 添加
     */


    public function add()


    {

        if (IS_POST) {


            $post = input('post.');
            /* 处理TAG标签 */


            if (!empty($post['tags_new'])) {


                $post['tags'] = !empty($post['tags']) ? $post['tags'] . ',' . $post['tags_new'] : $post['tags_new'];


                unset($post['tags_new']);


            }

            $post['tags'] = explode(',', $post['tags']);


            $post['tags'] = array_unique($post['tags']);


            $post['tags'] = implode(',', $post['tags']);
            $remark = implode(',', $post['remark']) ;

            /* END */


            $content = input('post.addonFieldExt.content', '', null);


            // 根据标题自动提取相关的关键字


            $seo_keywords = $post['seo_keywords'];


            if (!empty($seo_keywords)) {


                $seo_keywords = str_replace('，', ',', $seo_keywords);


            } else {


                // $seo_keywords = get_split_word($post['title'], $content);


            }


            // 自动获取内容第一张图片作为封面图


            $is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0;

            $litpic = $post['litpic_remote'];

            if ($litpic) {

                //对图片排序

                $path = '/uploads/allimg/' . $post['img_dir'] . '/';

                $tmpArr = [];

                $sArr = [];

                foreach ($litpic as $val) {

                    $filename = str_replace($path, '', $val);

                    list($prefix, $suffix) = explode('.', $filename);

                    if ($prefix) {

                        array_push($tmpArr, intval($prefix));

                        $sArr[$prefix] = $suffix;

                    }

                }


                asort($tmpArr);

                $imgArr = [];

                foreach ($tmpArr as $val) {

                    array_push($imgArr, $path . $val . '.' . $sArr[$val]);

                }


                $post['litpic'] = implode(',', $imgArr);

            } else {

                $post['litpic'] = '';

            }
            $post['remark'] = implode(',', $remark);

            /*是否有封面图*/


            if (empty($post['litpic'])) {


                $is_litpic = 0; // 无封面图


            } else {


                $is_litpic = 1; // 有封面图


            }


            // SEO描述


            $seo_description = '';


            if (empty($post['seo_description']) && !empty($content)) {


                $seo_description = @msubstr(checkStrHtml($content), 0, config('global.arc_seo_description_length'), false);


            } else {


                $seo_description = $post['seo_description'];


            }


            // 外部链接跳转


            $jumplinks = '';


            $is_jump = isset($post['is_jump']) ? $post['is_jump'] : 0;


            if (intval($is_jump) > 0) {


                $jumplinks = $post['jumplinks'];


            }


            // 模板文件，如果文档模板名与栏目指定的一致，默认就为空。让它跟随栏目的指定而变


            if ($post['type_tempview'] == $post['tempview']) {


                unset($post['type_tempview']);


                unset($post['tempview']);


            }


            //处理自定义文件名,仅由字母数字下划线和短横杆组成,大写强制转换为小写


            if (!empty($post['htmlfilename'])) {


                $post['htmlfilename'] = preg_replace("/[^a-zA-Z0-9_-]+/", "", $post['htmlfilename']);


                $post['htmlfilename'] = strtolower($post['htmlfilename']);


                //判断是否存在相同的自定义文件名


                $filenameCount = Db::name('archives')->where([


                    'htmlfilename' => $post['htmlfilename'],


                ])->count();


                if (!empty($filenameCount)) {


                    $this->error("自定义文件名已存在，请重新设置！");


                }


            }


            // 产品类型


            if (!empty($post['prom_type'])) {


                if ($post['prom_type_vir'] == 2) {


                    $post['netdisk_url'] = trim($post['netdisk_url']);


                    if (empty($post['netdisk_url'])) {


                        $this->error("网盘地址不能为空！");


                    }


                    $post['prom_type'] = 2;


                } else if ($post['prom_type_vir'] == 3) {


                    $post['text_content'] = trim($post['text_content']);


                    if (empty($post['text_content'])) {


                        $this->error("虚拟文本内容不能为空！");


                    }


                    $post['prom_type'] = 3;


                }


            }


            // --存储数据


            $newData = array(


                'typeid' => empty($post['typeid']) ? 0 : $post['typeid'],


                'channel' => $this->channeltype,


                'is_b' => empty($post['is_b']) ? 0 : $post['is_b'],


                'is_head' => empty($post['is_head']) ? 0 : $post['is_head'],


                'is_special' => empty($post['is_special']) ? 0 : $post['is_special'],


                'is_recom' => empty($post['is_recom']) ? 0 : $post['is_recom'],


                'is_jump' => $is_jump,


                'is_litpic' => $is_litpic,


                'jumplinks' => $jumplinks,

                'remark' => $remark,
                'seo_keywords' => $seo_keywords,


                'seo_description' => $seo_description,


                'admin_id' => session('admin_info.admin_id'),


                'stock_show' => empty($post['stock_show']) ? 0 : $post['stock_show'],


                'lang' => $this->admin_lang,


                'sort_order' => 100,


                'add_time' => strtotime($post['add_time']),


                'update_time' => strtotime($post['add_time']),


                'step' => $post['step']


            );

            $data = array_merge($post, $newData);


            $aid = Db::name('archives')->insertGetId($data);


            $_POST['aid'] = $aid;


            if ($aid) {


                // ---------后置操作


                model('Product')->afterSave($aid, $data, 'add');


                // ---------end


                // 添加产品规格


                model('ProductSpecPreset')->ProductSpecInsertAll($aid, $data);


                adminLog('新增产品：' . $data['title']);


                //虚拟商品保存


                if (!empty($post['prom_type']) && in_array($post['prom_type'], [2, 3])) {


                    model('ProductNetdisk')->saveProductNetdisk($aid, $data);


                }


                // 生成静态页面代码


                $successData = [


                    'aid' => $aid,


                    'tid' => $post['typeid'],


                ];


                $this->success("操作成功!", null, $successData);


                exit;


            }


            $this->error("操作失败!");


            exit;


        }


        $typeid = input('param.typeid/d', 0);


        $assign_data['step'] = 1;


        $assign_data['typeid'] = $typeid; // 栏目ID


        // 栏目信息


        $arctypeInfo = Db::name('arctype')->find($typeid);


        /*允许发布文档列表的栏目*/


        $arctype_html = allow_release_arctype($typeid, array($this->channeltype));


        $assign_data['arctype_html'] = $arctype_html;


        /*--end*/


        /*自定义字段*/


        $addonFieldExtList = model('Field')->getChannelFieldList($this->channeltype);


        $channelfieldBindRow = Db::name('channelfield_bind')->where([


            'typeid' => ['IN', [0, $typeid]],


        ])->column('field_id');


        if (!empty($channelfieldBindRow)) {


            foreach ($addonFieldExtList as $key => $val) {


                if (!in_array($val['id'], $channelfieldBindRow)) {


                    unset($addonFieldExtList[$key]);


                }


            }


        }


        $assign_data['addonFieldExtList'] = $addonFieldExtList;


        $assign_data['aid'] = 0;


        /*--end*/


        /*可控制的字段列表*/


        $assign_data['ifcontrolRow'] = Db::name('channelfield')->field('id,name')->where([


            'channel_id' => $this->channeltype,


            'ifmain' => 1,


            'ifeditable' => 1,


            'ifcontrol' => 0,


            'status' => 1,


        ])->getAllWithIndex('name');


        // 阅读权限


        $arcrank_list = get_arcrank_list();


        $assign_data['arcrank_list'] = $arcrank_list;


        /*产品参数*/


        $assign_data['canshu'] = $this->ajax_get_attr_input($typeid);


        /*--end*/


        /*模板列表*/


        $archivesLogic = new \app\admin\logic\ArchivesLogic;


        $templateList = $archivesLogic->getTemplateList($this->nid);


        $this->assign('templateList', $templateList);


        /*--end*/


        /*默认模板文件*/


        $tempview = 'view_' . $this->nid . '.' . config('template.view_suffix');


        !empty($arctypeInfo['tempview']) && $tempview = $arctypeInfo['tempview'];


        $this->assign('tempview', $tempview);


        /*--end*/


        // 商城配置


        $shopConfig = getUsersConfigData('shop');


        $assign_data['shopConfig'] = $shopConfig;


        // 商品规格


        if (isset($shopConfig['shop_open_spec']) && 1 == $shopConfig['shop_open_spec']) {


            // 预设值名称


            $assign_data['preset_value'] = Db::name('product_spec_preset')->where('lang', $this->admin_lang)->field('preset_id,preset_mark_id,preset_name')->group('preset_mark_id')->order('preset_mark_id desc')->select();


        }


        // URL模式


        $tpcache = config('tpcache');


        $assign_data['seo_pseudo'] = !empty($tpcache['seo_pseudo']) ? $tpcache['seo_pseudo'] : 1;


        $this->assign($assign_data);


        return $this->fetch();


    }


    /**
     * 编辑
     */


    public function edit()


    {

        if (IS_POST) {


            $post = input('post.');


            /* 处理TAG标签 */


            if (!empty($post['tags_new'])) {


                $post['tags'] = !empty($post['tags']) ? $post['tags'] . ',' . $post['tags_new'] : $post['tags_new'];


                unset($post['tags_new']);


            }


            $post['tags'] = explode(',', $post['tags']);


            $post['tags'] = array_unique($post['tags']);


            $post['tags'] = implode(',', $post['tags']);

            $remark = implode(',', $post['remark']);
            /* END */


            $typeid = input('post.typeid/d', 0);


            $content = input('post.addonFieldExt.content', '', null);


            // 根据标题自动提取相关的关键字


            $seo_keywords = $post['seo_keywords'];


            if (!empty($seo_keywords)) {


                $seo_keywords = str_replace('，', ',', $seo_keywords);


            } else {


                // $seo_keywords = get_split_word($post['title'], $content);


            }


            // 自动获取内容第一张图片作为封面图


            $is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0;


            /*$litpic = '';



            if ($is_remote == 1) {



                $litpic = $post['litpic_remote'];



            } else {



                $litpic = $post['litpic_local'];



            }



            if (empty($litpic)) {



                $litpic = get_html_first_imgurl($content);



            }



            $post['litpic'] = $litpic;*/


            $litpic = $post['litpic_remote'];

            if ($litpic) {

                //对图片排序

                $path = '/uploads/allimg/' . $post['img_dir'] . '/';

                $tmpArr = [];

                $sArr = [];

                foreach ($litpic as $val) {

                    $filename = str_replace($path, '', $val);

                    list($prefix, $suffix) = explode('.', $filename);

                    if ($prefix) {

                        array_push($tmpArr, intval($prefix));

                        $sArr[$prefix] = $suffix;

                    }

                }


                asort($tmpArr);

                $imgArr = [];

                foreach ($tmpArr as $val) {

                    array_push($imgArr, $path . $val . '.' . $sArr[$val]);

                }


                $post['litpic'] = implode(',', $imgArr);

            } else {

                $post['litpic'] = '';

            }


            /*是否有封面图*/


            if (empty($post['litpic'])) {


                $is_litpic = 0; // 无封面图


            } else {


                $is_litpic = !empty($post['is_litpic']) ? $post['is_litpic'] : 0; // 有封面图


            }


            // SEO描述


            $seo_description = '';


            if (empty($post['seo_description']) && !empty($content)) {


                $seo_description = @msubstr(checkStrHtml($content), 0, config('global.arc_seo_description_length'), false);


            } else {


                $seo_description = $post['seo_description'];


            }


            // --外部链接


            $jumplinks = '';


            $is_jump = isset($post['is_jump']) ? $post['is_jump'] : 0;


            if (intval($is_jump) > 0) {


                $jumplinks = $post['jumplinks'];


            }


            // 模板文件，如果文档模板名与栏目指定的一致，默认就为空。让它跟随栏目的指定而变


            if ($post['type_tempview'] == $post['tempview']) {


                unset($post['type_tempview']);


                unset($post['tempview']);


            }


            // 产品类型


            if (!empty($post['prom_type'])) {


                if ($post['prom_type_vir'] == 2) {


                    $post['netdisk_url'] = trim($post['netdisk_url']);


                    if (empty($post['netdisk_url'])) {


                        $this->error("网盘地址不能为空！");


                    }


                    $post['prom_type'] = 2;


                } else if ($post['prom_type_vir'] == 3) {


                    $post['text_content'] = trim($post['text_content']);


                    if (empty($post['text_content'])) {


                        $this->error("虚拟文本内容不能为空！");


                    }


                    $post['prom_type'] = 3;


                }


            }


            //处理自定义文件名,仅由字母数字下划线和短横杆组成,大写强制转换为小写


            if (!empty($post['htmlfilename'])) {


                $post['htmlfilename'] = preg_replace("/[^a-zA-Z0-9_-]+/", "", $post['htmlfilename']);


                $post['htmlfilename'] = strtolower($post['htmlfilename']);


                //判断是否存在相同的自定义文件名


                $filenameCount = Db::name('archives')->where([


                    'aid' => ['NEQ', $post['aid']],


                    'htmlfilename' => $post['htmlfilename'],


                ])->count();


                if (!empty($filenameCount)) {


                    $this->error("自定义文件名已存在，请重新设置！");


                }


            }


            // 同步栏目切换模型之后的文档模型


            $channel = Db::name('arctype')->where(['id' => $typeid])->getField('current_channel');


            // --存储数据

            $newData = array(


                'typeid' => $typeid,


                'channel' => $channel,


                'is_b' => empty($post['is_b']) ? 0 : $post['is_b'],


                'is_head' => empty($post['is_head']) ? 0 : $post['is_head'],


                'is_special' => empty($post['is_special']) ? 0 : $post['is_special'],


                'is_recom' => empty($post['is_recom']) ? 0 : $post['is_recom'],


                'is_jump' => $is_jump,

                'remark' => $remark,
                'is_litpic' => $is_litpic,


                'jumplinks' => $jumplinks,


                'seo_keywords' => $seo_keywords,


                'seo_description' => $seo_description,


                'stock_show' => empty($post['stock_show']) ? 0 : $post['stock_show'],


                'add_time' => strtotime($post['add_time']),


                'update_time' => getTime(),


            );

            $data = array_merge($post, $newData);
            $r = Db::name('archives')->where([


                'aid' => $data['aid'],


                'lang' => $this->admin_lang,


            ])->update($data);

            if ($r) {


                // ---------后置操作


                model('Product')->afterSave($data['aid'], $data, 'edit');


                // 更新规格名称数据


                // model('ProductSpecData')->ProducSpecNameEditSave($data);


                //虚拟商品保存


                if (!empty($post['prom_type']) && in_array($post['prom_type'], [2, 3])) {


                    model('ProductNetdisk')->saveProductNetdisk($data['aid'], $data);


                }


                // 更新规格值及金额数据


                model('ProductSpecValue')->ProducSpecValueEditSave($data);


                // ---------end


                adminLog('编辑产品：' . $data['title']);


                // 生成静态页面代码


                $successData = [


                    'aid' => $data['aid'],


                    'tid' => $typeid,


                ];


                $this->success("操作成功!", null, $successData);


                exit;


            }


            $this->error("操作失败!");


            exit;


        }


        $assign_data = array();


        $id = input('id/d');


        $info = model('Product')->getInfo($id);


        // 获取规格数据信息


        // 包含：SpecSelectName、HtmlTable、spec_mark_id_arr、preset_value


        $assign_data = model('ProductSpecData')->GetProductSpecData($id);


        if (empty($info)) {


            $this->error('数据不存在，请联系管理员！');


            exit;


        }


        /*兼容采集没有归属栏目的文档*/


        if (empty($info['channel'])) {


            $channelRow = Db::name('channeltype')->field('id as channel')
                ->where('id', $this->channeltype)
                ->find();


            $info = array_merge($info, $channelRow);


        }


        /*--end*/


        $typeid = $info['typeid'];


        $assign_data['typeid'] = $typeid;


        $assign_data['step'] = $info['step'];


        // 栏目信息


        $arctypeInfo = Db::name('arctype')->find($typeid);


        $info['channel'] = $arctypeInfo['current_channel'];


        if (is_http_url($info['litpic'])) {


            $info['is_remote'] = 1;


            $info['litpic_remote'] = handle_subdir_pic($info['litpic']);


        } else {


            $info['is_remote'] = 0;


            $info['litpic_local'] = handle_subdir_pic($info['litpic']);


        }


        // SEO描述


        if (!empty($info['seo_description'])) {


            $info['seo_description'] = @msubstr(checkStrHtml($info['seo_description']), 0, config('global.arc_seo_description_length'), false);


        }


        if ($info['litpic'] && $info['img_dir']) {

            $arr = explode(',', $info['litpic']);
            $remarks = explode(',', $info['remark']);

            $path = '/uploads/allimg/' . $info['img_dir'] . '/';

            $timgArr = [];
            foreach ($arr as $key => $val) {

                $filename = str_replace($path, '', $val);

                list($prefix, $suffix) = explode('.', $filename);

                $txt = $this->number2chinese(intval($prefix));

                $timgArr[] = [

                    'step_txt' => '第' . $txt . '步',

                    'img_url' => $val,
                    'remark' => $remarks[$key]
                ];

            }

            $info['timgArr'] = $timgArr;


        }

        $assign_data['field'] = $info;
        // 产品相册

        $proimg_list = model('ProductImg')->getProImg($id);


        foreach ($proimg_list as $key => $val) {


            $proimg_list[$key]['image_url'] = handle_subdir_pic($val['image_url']); // 支持子目录


        }


        $assign_data['proimg_list'] = $proimg_list;


        /*允许发布文档列表的栏目，文档所在模型以栏目所在模型为主，兼容切换模型之后的数据编辑*/


        $arctype_html = allow_release_arctype($typeid, array($info['channel']));


        $assign_data['arctype_html'] = $arctype_html;


        /*--end*/


        /*自定义字段*/


        $addonFieldExtList = model('Field')->getChannelFieldList($info['channel'], 0, $id, $info);


        $channelfieldBindRow = Db::name('channelfield_bind')->where([


            'typeid' => ['IN', [0, $typeid]],


        ])->column('field_id');


        if (!empty($channelfieldBindRow)) {


            foreach ($addonFieldExtList as $key => $val) {


                if (!in_array($val['id'], $channelfieldBindRow)) {


                    unset($addonFieldExtList[$key]);


                }


            }


        }

        // dump($addonFieldExtList);exit;

        $assign_data['addonFieldExtList'] = $addonFieldExtList;


        $assign_data['aid'] = $id;


        /*--end*/


        /*可控制的主表字段列表*/


        $assign_data['ifcontrolRow'] = Db::name('channelfield')->field('id,name')->where([


            'channel_id' => $this->channeltype,


            'ifmain' => 1,


            'ifeditable' => 1,


            'ifcontrol' => 0,


            'status' => 1,


        ])->getAllWithIndex('name');


        /*虚拟商品内容读取*/


        $assign_data['netdisk'] = Db::name("product_netdisk")->where('aid', $id)->find();


        /*end*/


        // 阅读权限


        $arcrank_list = get_arcrank_list();


        $assign_data['arcrank_list'] = $arcrank_list;


        /*产品参数*/


        $assign_data['canshu'] = $this->ajax_get_attr_input($typeid, $id);


        /*--end*/


        /*模板列表*/


        $archivesLogic = new \app\admin\logic\ArchivesLogic;


        $templateList = $archivesLogic->getTemplateList($this->nid);


        $this->assign('templateList', $templateList);


        /*--end*/


        /*默认模板文件*/


        $tempview = $info['tempview'];


        empty($tempview) && $tempview = $arctypeInfo['tempview'];


        $this->assign('tempview', $tempview);


        /*--end*/


        // 商城配置


        $shopConfig = getUsersConfigData('shop');


        $assign_data['shopConfig'] = $shopConfig;


        // 处理产品价格属性


        $IsSame = '';


        if (empty($shopConfig['shop_type']) || 1 == $shopConfig['shop_type']) {


            if ($shopConfig['shop_type'] == $assign_data['field']['prom_type']) {


                $IsSame = '0'; // 相同


            } elseif ($shopConfig['shop_type'] == 1 && in_array($assign_data['field']['prom_type'], [2, 3])) {


                $IsSame = '0'; // 相同


            } else {


                $IsSame = '1'; // 不相同


            }


        }


        $assign_data['IsSame'] = $IsSame;


        // URL模式


        $tpcache = config('tpcache');


        $assign_data['seo_pseudo'] = !empty($tpcache['seo_pseudo']) ? $tpcache['seo_pseudo'] : 1;



        $this->assign($assign_data);

        return $this->fetch();


    }


    /**
     * 删除
     */


    public function del()


    {


        if (IS_POST) {


            $archivesLogic = new \app\admin\logic\ArchivesLogic;


            $archivesLogic->del();


        }


    }


    /**
     * 删除商品相册图
     */


    public function del_proimg()


    {


        if (IS_POST) {


            $filename = input('filename/s');


            $filename = str_replace('../', '', $filename);


            $filename = trim($filename, '.');


            if (eyPreventShell($filename) && !empty($filename)) {


                $filename_new = trim($filename, '/');


                $filetype = preg_replace('/^(.*)\.(\w+)$/i', '$2', $filename);


                $phpfile = strtolower(strstr($filename, '.php'));  //排除PHP文件


                $size = getimagesize($filename_new);


                $fileInfo = explode('/', $size['mime']);


                if ((file_exists($filename_new) && $fileInfo[0] != 'image') || $phpfile || !in_array($filetype, explode(',', config('global.image_ext')))) {


                    exit;


                }


                if (!empty($filename)) {


                    M('product_img')->where("image_url = '$filename'")->delete();


                }


            }


        }


    }


    /**
     * 产品参数
     */


    public function attribute_index()


    {


        $assign_data = array();


        $condition = array();


        // 获取到所有GET参数


        $get = input('get.');


        $typeid = input('typeid/d', 0);


        // 应用搜索条件


        foreach (['keywords', 'typeid'] as $key) {


            if (isset($get[$key]) && $get[$key] !== '') {


                if ($key == 'keywords') {


                    $condition['a.attr_name'] = array('LIKE', "%{$get[$key]}%");


                } else if ($key == 'typeid') {


                    $typeids = model('Arctype')->getHasChildren($get[$key]);


                    $condition['a.typeid'] = array('IN', array_keys($typeids));


                } else {


                    $condition['a.' . $key] = array('eq', $get[$key]);


                }


            }


        }


        $condition['a.is_del'] = 0;


        // 多语言


        $condition['a.lang'] = $this->admin_lang;


        /**
         * 数据查询，搜索出主键ID的值
         */


        $count = DB::name('product_attribute')->alias('a')->where($condition)->count();// 查询满足要求的总记录数


        $Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数


        $list = DB::name('product_attribute')
            ->field("a.attr_id")
            ->alias('a')
            ->where($condition)
            ->order('a.sort_order asc, a.attr_id asc')
            ->limit($Page->firstRow . ',' . $Page->listRows)
            ->getAllWithIndex('attr_id');


        /**
         * 完善数据集信息
         * 在数据量大的情况下，经过优化的搜索逻辑，先搜索出主键ID，再通过ID将其他信息补充完整；
         */


        if ($list) {


            $attr_ids = array_keys($list);


            $fields = "b.*, a.*";


            $row = DB::name('product_attribute')
                ->field($fields)
                ->alias('a')
                ->join('__ARCTYPE__ b', 'a.typeid = b.id', 'LEFT')
                ->where('a.attr_id', 'in', $attr_ids)
                ->getAllWithIndex('attr_id');


            /*获取多语言关联绑定的值*/


            $row = model('LanguageAttr')->getBindValue($row, 'product_attribute', $this->main_lang); // 多语言


            /*--end*/


            foreach ($row as $key => $val) {


                $val['fieldname'] = 'attr_' . $val['attr_id'];


                $row[$key] = $val;


            }


            foreach ($list as $key => $val) {


                $list[$key] = $row[$val['attr_id']];


            }


        }


        $show = $Page->show(); // 分页显示输出


        $assign_data['page'] = $show; // 赋值分页输出


        $assign_data['list'] = $list; // 赋值数据集


        $assign_data['pager'] = $Page; // 赋值分页对象


        /*获取当前模型栏目*/


        $selected = $typeid;


        $arctypeLogic = new ArctypeLogic();


        $map = array(


            'channeltype' => $this->channeltype,


            'is_del' => 0,


        );


        $arctype_max_level = intval(config('global.arctype_max_level'));


        $select_html = $arctypeLogic->arctype_list(0, $selected, true, $arctype_max_level, $map);


        $this->assign('select_html', $select_html);


        /*--end*/


        // 栏目ID


        $assign_data['typeid'] = $typeid; // 栏目ID


        /*当前栏目信息*/


        $arctype_info = array();


        if ($typeid > 0) {


            $arctype_info = M('arctype')->field('typename')->find($typeid);


        }


        $assign_data['arctype_info'] = $arctype_info;


        /*--end*/


        /*选项卡*/


        $tab = input('param.tab/d', 3);


        $assign_data['tab'] = $tab;


        /*--end*/


        $assign_data['attrInputTypeArr'] = $this->attrInputTypeArr; // 表单类型


        $this->assign($assign_data);


        return $this->fetch();


    }


    /**
     * 新增产品参数
     */


    public function attribute_add()


    {


        //防止php超时


        function_exists('set_time_limit') && set_time_limit(0);


        if (IS_AJAX && IS_POST)//ajax提交验证


        {


            $model = model('ProductAttribute');


            $attr_values = str_replace('_', '', input('attr_values')); // 替换特殊字符


            $attr_values = str_replace('@', '', $attr_values); // 替换特殊字符


            $attr_values = trim($attr_values);


            $post_data = input('post.');


            $post_data['attr_values'] = $attr_values;


            $savedata = array(


                'attr_name' => $post_data['attr_name'],


                'typeid' => $post_data['typeid'],


                'attr_input_type' => isset($post_data['attr_input_type']) ? $post_data['attr_input_type'] : '',


                'attr_values' => isset($post_data['attr_values']) ? $post_data['attr_values'] : '',


                'sort_order' => $post_data['sort_order'],


                'lang' => $this->admin_lang,


                'add_time' => getTime(),


                'update_time' => getTime(),


            );


            // 数据验证


            $validate = \think\Loader::validate('ProductAttribute');


            if (!$validate->batch()->check($savedata)) {


                $error = $validate->getError();


                $error_msg = array_values($error);


                $return_arr = array(


                    'status' => -1,


                    'msg' => $error_msg[0],


                    'data' => $error,


                );


                respose($return_arr);


            } else {


                $model->data($savedata, true); // 收集数据


                $model->save(); // 写入数据到数据库


                $insertId = $model->getLastInsID();


                /*同步产品属性ID到多语言的模板变量里*/


                $this->syn_add_language_attribute($insertId);


                /*--end*/


                $return_arr = array(


                    'status' => 1,


                    'msg' => '操作成功',


                    'data' => array('url' => url('Product/attribute_index', array('typeid' => $post_data['typeid']))),


                );


                adminLog('新增产品参数：' . $savedata['attr_name']);


                respose($return_arr);


            }


        }


        $typeid = input('param.typeid/d', 0);


        $assign_data = array();


        /*允许发布文档列表的栏目*/


        $arctype_html = allow_release_arctype($typeid, array($this->channeltype));


        $assign_data['arctype_html'] = $arctype_html;


        /*--end*/


        $this->assign($assign_data);


        return $this->fetch();


    }


    /**
     * 编辑产品参数
     */


    public function attribute_edit()


    {


        if (IS_AJAX && IS_POST)//ajax提交验证


        {


            $model = model('ProductAttribute');


            $attr_values = str_replace('_', '', input('attr_values')); // 替换特殊字符


            $attr_values = str_replace('@', '', $attr_values); // 替换特殊字符


            $attr_values = trim($attr_values);


            $post_data = input('post.');


            $post_data['attr_values'] = $attr_values;


            $savedata = array(


                'attr_id' => $post_data['attr_id'],


                'attr_name' => $post_data['attr_name'],


                'typeid' => $post_data['typeid'],


                'attr_input_type' => isset($post_data['attr_input_type']) ? $post_data['attr_input_type'] : '',


                'attr_values' => isset($post_data['attr_values']) ? $post_data['attr_values'] : '',


                'sort_order' => $post_data['sort_order'],


                'update_time' => getTime(),


            );


            // 数据验证


            $validate = \think\Loader::validate('ProductAttribute');


            if (!$validate->batch()->check($savedata)) {


                $error = $validate->getError();


                $error_msg = array_values($error);


                $return_arr = array(


                    'status' => -1,


                    'msg' => $error_msg[0],


                    'data' => $error,


                );


                respose($return_arr);


            } else {


                $model->data($savedata, true); // 收集数据


                $model->isUpdate(true, [


                    'attr_id' => $post_data['attr_id'],


                    'lang' => $this->admin_lang,


                ])->save(); // 写入数据到数据库


                $return_arr = array(


                    'status' => 1,


                    'msg' => '操作成功',


                    'data' => array('url' => url('Product/attribute_index', array('typeid' => $post_data['typeid']))),


                );


                adminLog('编辑产品参数：' . $savedata['attr_name']);


                respose($return_arr);


            }


        }


        $assign_data = array();


        $id = input('id/d');


        /*获取多语言关联绑定的值*/


        $new_id = model('LanguageAttr')->getBindValue($id, 'product_attribute'); // 多语言


        !empty($new_id) && $id = $new_id;


        /*--end*/


        $info = M('ProductAttribute')->where([


            'attr_id' => $id,


            'lang' => $this->admin_lang,


        ])->find();


        if (empty($info)) {


            $this->error('数据不存在，请联系管理员！');


            exit;


        }


        $assign_data['field'] = $info;


        /*允许发布文档列表的栏目*/


        $arctype_html = allow_release_arctype($info['typeid'], array($this->channeltype));


        $assign_data['arctype_html'] = $arctype_html;


        /*--end*/


        $this->assign($assign_data);


        return $this->fetch();


    }


    /**
     * 删除产品参数
     */


    public function attribute_del()


    {


        $id_arr = input('del_id/a');


        $id_arr = eyIntval($id_arr);


        if (!empty($id_arr)) {


            /*多语言*/


            if (is_language()) {


                $attr_name_arr = [];


                foreach ($id_arr as $key => $val) {


                    $attr_name_arr[] = 'attr_' . $val;


                }


                $new_id_arr = Db::name('language_attr')->where([


                    'attr_name' => ['IN', $attr_name_arr],


                    'attr_group' => 'product_attribute',


                ])->column('attr_value');


                !empty($new_id_arr) && $id_arr = $new_id_arr;


            }


            /*--end*/


            $r = M('ProductAttribute')->where([


                'attr_id' => ['IN', $id_arr],


            ])->update([


                'is_del' => 1,


                'update_time' => getTime(),


            ]);


            if ($r) {


                adminLog('删除产品参数-id：' . implode(',', $id_arr));


                $this->success('删除成功');


            } else {


                $this->error('删除失败');


            }


        } else {


            $this->error('参数有误');


        }


    }


    /**
     * 动态获取产品参数输入框 根据不同的数据返回不同的输入框类型
     */


    public function ajax_get_attr_input($typeid = '', $aid = '')


    {


        $productLogic = new ProductLogic();


        $str = $productLogic->getAttrInput($aid, $typeid);


        if (empty($str)) {


            $str = '<div style="font-size: 12px;text-align: center;">提示：该主栏目还没有参数值，若有需要请点击【<a href="' . url('Product/attribute_index', array('typeid' => $typeid)) . '">产品参数</a>】进行更多操作。</div>';


        }


        if (IS_AJAX) {


            exit($str);


        } else {


            return $str;


        }


    }


    /**
     * 同步新增产品属性ID到多语言的模板变量里
     */


    private function syn_add_language_attribute($attr_id)


    {


        /*单语言情况下不执行多语言代码*/


        if (!is_language()) {


            return true;


        }


        /*--end*/


        $attr_group = 'product_attribute';


        $admin_lang = $this->admin_lang;


        $main_lang = $this->main_lang;


        $languageRow = Db::name('language')->field('mark')->order('id asc')->select();


        if (!empty($languageRow) && $admin_lang == $main_lang) { // 当前语言是主体语言，即语言列表最早新增的语言


            $result = Db::name('product_attribute')->find($attr_id);


            $attr_name = 'attr_' . $attr_id;


            $r = Db::name('language_attribute')->save([


                'attr_title' => $result['attr_name'],


                'attr_name' => $attr_name,


                'attr_group' => $attr_group,


                'add_time' => getTime(),


                'update_time' => getTime(),


            ]);


            if (false !== $r) {


                $data = [];


                foreach ($languageRow as $key => $val) {


                    /*同步新产品属性到其他语言产品属性列表*/


                    if ($val['mark'] != $admin_lang) {


                        $addsaveData = $result;


                        $addsaveData['lang'] = $val['mark'];


                        $newTypeid = Db::name('language_attr')->where([


                            'attr_name' => 'tid' . $result['typeid'],


                            'attr_group' => 'arctype',


                            'lang' => $val['mark'],


                        ])->getField('attr_value');


                        $addsaveData['typeid'] = $newTypeid;


                        unset($addsaveData['attr_id']);


                        $attr_id = Db::name('product_attribute')->insertGetId($addsaveData);


                    }


                    /*--end*/


                    /*所有语言绑定在主语言的ID容器里*/


                    $data[] = [


                        'attr_name' => $attr_name,


                        'attr_value' => $attr_id,


                        'lang' => $val['mark'],


                        'attr_group' => $attr_group,


                        'add_time' => getTime(),


                        'update_time' => getTime(),


                    ];


                    /*--end*/


                }


                if (!empty($data)) {


                    model('LanguageAttr')->saveAll($data);


                }


            }


        }


    }


    /**
     * 添加步骤
     */


    public function add_step()
    {


        $step = input('step', 2);


        $rsp = ['msg' => 'ok', 'status' => 0, 'data' => ''];


        if ($step > 20) {


            $rsp['msg'] = '数量超出限制';


            return json($rsp);


        }


        $typeid = input('typeid/d', 0);


        $this->assign('typeid', $typeid);


        $step++;


        $this->assign('step', $step);


        $html = $this->fetch('archives/add_step');


        $rsp['status'] = 1;


        $rsp['data'] = $html;


        return json($rsp);


    }


    /**
     * 编辑步骤
     */


    public function edit_step()
    {


        $step = input('step', 2);


        $aid = input('aid', 0);


        $rsp = ['msg' => 'ok', 'status' => 0, 'data' => ''];


        if ($step > 20) {


            $rsp['msg'] = '数量超出限制';


            return json($rsp);


        }


        $typeid = input('typeid/d', 0);


        $this->assign('typeid', $typeid);


        $this->assign('step', $step);


        $this->assign('aid', $aid);


        $html = $this->fetch('archives/edit_step');


        $rsp['status'] = 1;


        $rsp['data'] = $html;


        return json($rsp);


    }


    /**
     * 获取步骤内容
     */


    public function ajax_get_addonextitem_step()


    {


        $aid = input('param.aid/d', 0);


        $typeid = input('param.typeid/d', 0);


        $channeltype = input('param.channeltype/d', 0);


        $step = input('param.step/d', 0);


        if (!empty($typeid) && !empty($channeltype)) {


            // 存在aid则执行，查询文档数据


            $info = !empty($aid) ? model('Archives')->UnifiedGetInfo($aid, null, false) : [];


            // 查询对应的自定义字段


            $addonFieldExtList = model('Field')->getChannelFieldList($channeltype, 0, $aid, $info);


            // 查询绑定的自定义字段


            $channelfieldBindRow = Db::name('channelfield_bind')->where([


                'typeid' => ['IN', [0, $typeid]],


            ])->column('field_id');


            // 匹配显示的自定义字段


            $htmltextField = []; // 富文本的字段名


            if (!empty($channelfieldBindRow)) {


                foreach ($addonFieldExtList as $key => $val) {


                    if (!in_array($val['id'], $channelfieldBindRow)) {


                        unset($addonFieldExtList[$key]);


                        continue;


                    }


                    if ($val['dtype'] == 'htmltext') {


                        array_push($htmltextField, $val['name'] . '_' . $step);


                    }


                }


            }


            $addonFieldExtList[0]['name'] = $addonFieldExtList[0]['name'] . '_' . $step;


            $addonFieldExtList[0]['title'] = '第' . $this->number2chinese($step) . '步：';


            $assign_data['addonFieldExtList'] = $addonFieldExtList;


            $assign_data['step'] = $step;


            // 加载模板


            $this->assign($assign_data);


            // 渲染模板


            $html = $this->fetch('field/addonextitem_step');


            $rsp = ['msg' => 'ok', 'status' => 1, 'data' => ['html' => $html, 'htmltextField' => $htmltextField]];


            return json($rsp);


        }


    }


    /**
     * 编辑获取步骤内容
     */


    public function ajax_get_addonextitem_edit_step()


    {


        $aid = input('param.aid/d', 0);


        $typeid = input('param.typeid/d', 0);


        $channeltype = input('param.channeltype/d', 0);


        $step = input('param.step/d', 0);


        if (!empty($typeid) && !empty($channeltype)) {


            // 存在aid则执行，查询文档数据


            $info = !empty($aid) ? model('Archives')->UnifiedGetInfo($aid, null, false) : [];


            // 查询对应的自定义字段


            $addonFieldExtList = model('Field')->getChannelFieldList($channeltype, 0, $aid, $info);


            // 查询绑定的自定义字段


            $channelfieldBindRow = Db::name('channelfield_bind')->where([


                'typeid' => ['IN', [0, $typeid]],


            ])->column('field_id');


            // 匹配显示的自定义字段


            $htmltextField = []; // 富文本的字段名


            if (!empty($channelfieldBindRow)) {


                foreach ($addonFieldExtList as $key => $val) {


                    if (!in_array($val['id'], $channelfieldBindRow)) {


                        unset($addonFieldExtList[$key]);


                        continue;


                    }


                    if ($val['dtype'] == 'htmltext') {


                        array_push($htmltextField, $val['name'] . '_' . $step);


                    }


                }


            }


            $content = M('product_content')->where('aid', $aid)->getField('content_' . $step);


            $addonFieldExtList[0]['name'] = $addonFieldExtList[0]['name'] . '_' . $step;


            $addonFieldExtList[0]['title'] = '第' . $this->number2chinese($step) . '步：';


            $addonFieldExtList[0]['dfvalue'] = $content;


            $assign_data['addonFieldExtList'] = $addonFieldExtList;


            $assign_data['step'] = $step;


            // 加载模板


            $count = M('archives_message')->where('aid', $aid)->where('status', 2)->where('step', $step)->count();


            $assign_data['count'] = $count;


            $assign_data['aid'] = $aid;


            $this->assign($assign_data);


            // 渲染模板


            $html = $this->fetch('field/addonextitem_edit_step');


            $rsp = ['msg' => 'ok', 'status' => 1, 'data' => ['html' => $html, 'htmltextField' => $htmltextField]];


            return json($rsp);


        }


    }


    /**
     * 数字转换为中文
     * @param $num
     * @return mixed|string
     */


    public function number2chinese($num)


    {


        if (is_int($num) && $num < 100) {


            $char = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');


            $unit = ['', '十', '百', '千', '万'];


            $return = '';


            if ($num < 10) {


                $return = $char[$num];


            } elseif ($num % 10 == 0) {


                $firstNum = substr($num, 0, 1);


                if ($num != 10) $return .= $char[$firstNum];


                $return .= $unit[strlen($num) - 1];


            } elseif ($num < 20) {


                $return = $unit[substr($num, 0, -1)] . $char[substr($num, -1)];


            } else {


                $numData = str_split($num);


                $numLength = count($numData) - 1;


                foreach ($numData as $k => $v) {


                    if ($k == $numLength) continue;


                    $return .= $char[$v];


                    if ($v != 0) $return .= $unit[$numLength - $k];


                }


                $return .= $char[substr($num, -1)];


            }


            return $return;


        }


    }


    /**
     * 获取留言列表
     */


    public function getMsgList()
    {


        $aid = input('param.aid/d', 0);


        $step = input('param.step/d', 0);


        $rsp = ['msg' => 'ok', 'status' => 1, 'data' => []];


        $list = M('archives_message')->where('aid', $aid)->where('status', 2)->field('content,add_time,id')->where('step', $step)->order('id desc')->select();


        foreach ($list as &$val) {


            $val['add_time'] = date('Y-m-d H:i:s', $val['add_time']);


            M('archives_message')->where('id', $val['id'])->setField('status', 1);


        }


        $this->assign('list', $list);


        $html = $this->fetch('product/msg_list');


        $rsp['data'] = $html;


        return json($rsp);


    }


    /**
     * 删除消息
     * @return \think\response\Json
     */


    public function delMsg()
    {


        $aid = input('param.aid/d', 0);


        $step = input('param.step/d', 0);


        $rsp = ['msg' => 'ok', 'status' => 0, 'data' => []];


        if (empty($aid) || empty($step)) {


            $rsp['msg'] = '参数错误';


            return json($rsp);


        }


        $res = M('archives_message')->where('aid', $aid)->where('step', $step)->delete();


        if ($res !== false) {


            $rsp['status'] = 1;


            $rsp['msg'] = 'ok';


        } else {


            $rsp['msg'] = '删除失败';


        }


        return json($rsp);


    }


    /**
     * 获取备注列表
     */


    public function getRemarkList()
    {


        $aid = input('param.aid/d', 0);


        $step = input('param.step/d', 0);


        $rsp = ['msg' => 'ok', 'status' => 1, 'data' => []];


        $list = Db::name('archives_remark')->where('aid', $aid)->field('content,update_time,id')->where('step', $step)->order('id desc')->select();


        $this->assign('list', $list);


        $html = $this->fetch('product/remark_list');


        $rsp['data'] = $html;


        return json($rsp);


    }


    /**
     * 添加或修改备注
     * @return \think\response\Json
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */


    public function updateRemark()
    {


        $id = input('post.id', 0);


        $content = input('post.content', '');


        $rsp = ['msg' => 'ok', 'status' => 1, 'data' => []];


        if (empty($content)) {


            $rsp['msg'] = '请输入备注内容';


            return json($rsp);


        }


        $tmp = [


            'content' => $content,


            'update_time' => time(),


        ];


        if ($id) {


            //修改


            $res = Db::name('archives_remark')->where('id', $id)->update($tmp);


        } else {


            //添加


            $aid = input('post.aid/d', 0);


            $step = input('post.step/d', 0);


            if (empty($aid) || empty($step)) {


                $rsp['msg'] = '参数错误';


                return json($rsp);


            }


            $tmp['aid'] = $aid;


            $tmp['step'] = $step;


            $res = Db::name('archives_remark')->insert($tmp);


        }


        if ($res !== false) {


            $rsp['status'] = 1;


            $rsp['msg'] = 'ok';


        } else {


            $rsp['msg'] = '删除失败';


        }


        return json($rsp);


    }


    /**
     * 删除备注
     * @return \think\response\Json
     */


    public function delRemark()
    {


        $id = input('param.id/d', 0);


        $rsp = ['msg' => 'ok', 'status' => 0, 'data' => []];


        $res = Db::name('archives_remark')->where('id', $id)->delete();


        if ($res !== false) {


            $rsp['status'] = 1;


            $rsp['msg'] = 'ok';


        } else {


            $rsp['msg'] = '删除失败';


        }


        return json($rsp);


    }


    public function ajaxGetRemarkList()
    {


        $id = input('param.id/d', 0);


        $aid = input('param.aid/d', 0);


        $step = input('param.step/d', 0);


        if ($id) {


            $detail = Db::name('archives_remark')->where('id', $id)->find();


            $aid = $detail['aid'];


            $step = $detail['step'];


        }


        $rsp = ['msg' => 'ok', 'status' => 1, 'data' => []];


        $list = Db::name('archives_remark')->where('aid', $aid)->field('content,update_time,id')->where('step', $step)->order('id desc')->select();


        $html = '';


        $index = 1;


        foreach ($list as $val) {


            $content = substr($val['content'], 0, 60);


            $html .= '<tr>';


            $html .= '<td>' . $index . '</td>';


            $html .= '<td title="' . $val["content"] . '">' . $content . '</td>';


            $html .= '<td>' . date("Y-m-d H:i:s", $val["update_time"]) . '</td>';


            $html .= '<td data-id="' . $val["id"] . '" data-content="' . $val["content"] . '">';


            $html .= '<a href="javascript:;" class="editRemark" title="编辑">编辑</a>&nbsp;&nbsp;';


            $html .= '<a href="javascript:;" class="delRemark" title="删除">删除</a>';


            $html .= '</td>';


            $html .= '</tr>';


            $index++;


        }


        $rsp['data'] = $html;


        return json($rsp);


    }


}